package com.ssm.ioc;

import com.ssm.ano.Controller;
import com.ssm.ano.ProxyAOP;
import com.ssm.ano.Service;

import java.util.HashSet;
import java.util.Set;

/**
 * 根据不同注解返回目标类集合
 */
public class ClassHelper {
    private static final Set<Class<?>> CLASS_SET;

    static {
        String packageName = PropertiesUtil.getBasePackage();
        CLASS_SET = ClassUtil.getClassSet(packageName);
    }

    // 获取所有的类
    public static Set<Class<?>> getAllClass() {
        return CLASS_SET;
    }

    // 获取所有注释Service 的类
    public static Set<Class<?>> getServiceClass() {
        Set<Class<?>> classSet = new HashSet<Class<?>>();
        for (Class<?> myClass : CLASS_SET) {
            if (myClass.isAnnotationPresent(Service.class)) {
                classSet.add(myClass);
            }
        }
        return classSet;
    }

    // 获取所有注释Controller 的类
    public static Set<Class<?>> getControllerClass() {
        Set<Class<?>> classSet = new HashSet<Class<?>>();
        for (Class<?> myClass : CLASS_SET) {
            if (myClass.isAnnotationPresent(Controller.class)) {
                classSet.add(myClass);
            }
        }
        return classSet;
    }

    // 获取所有注释ProxyAOP 的类
    public static Set<Class<?>> getProxyClass() {
        Set<Class<?>> classSet = new HashSet<Class<?>>();
        for (Class<?> myClass : CLASS_SET) {
            if (myClass.isAnnotationPresent(ProxyAOP.class)) {
                classSet.add(myClass);
            }
        }
        return classSet;
    }

    // 获取所有的Bean 类
    public static Set<Class<?>> getBeanClass() {
        Set<Class<?>> classSet = new HashSet<Class<?>>();
        classSet.addAll(getControllerClass());
        classSet.addAll(getServiceClass());
        classSet.addAll(getProxyClass());
        return classSet;
    }
}